package com.edou.auth.service;

import java.util.List;

import com.edou.auth.dto.DepartCondition;
import com.edou.auth.entity.Depart;

public interface IDepartService {
	
	/**
	 * 查询全部部门
	 * @param value
	 * @return
	 */
	List<Depart> listDepartAll();
	
	/**
	 * 根据用户id查询部门
	 * @param userId
	 * @return
	 */
	List<Depart> listDepartByUserId(String userId);

	/**
	 * 根据上级ID查询部门列表
	 * @param pageResult 分页对象
	 * @param value 上级ID
	 */
	List<Depart> listDepartByPid(String pid);
	
	/**
	 * 根据条件查询部门
	 */
	List<Depart> listDepartByCondition(DepartCondition condition);
	
	/**
	 * 根据ID查询
	 * @param id 主键
	 * @return 部门表
	 */
	Depart getDepartById(String id);
	
	/**
	 * 根据code查询
	 * @param id 主键
	 * @return 部门表
	 */
	Depart getDepartByNo(String no);
	
	/**
	 * 根据父级ID查询部门数量
	 * @param parentId
	 * @return
	 */
	int getCountByParentId(String parentId);
	
	/**
	 * 根据当前部门递归查找上级部门，直到topLevel级部门
	 * 方泉构建的工具类方法
	 * @param departId	部门ID
	 * @param topLevel	auth_depart表中的level，最高级是0，一级是1，以此类推
	 * @return
	 */
	List<Depart> listDepartLoopByDepartId(String departId, Integer topLevel);

	/**
	 * 新增
	 * @param item 部门表
	 */
	void add(Depart item);

	/**
	 * 修改
	 * @param item 部门表
	 */
	void update(Depart item);

	/**
	 * 移动部门
	 * @param selIds 将移动的部门ID
	 * @param departId 目标部门ID
	 * @param updateBy 修改人
	 */
	void doMove(String selIds,String departId,String updateBy);
	
	/**
	 * 更新部门的名称链和ID链
	 * @param departList
	 */
	void updateChain(List<Depart> departList);
	
	/**
	 * 根据ID集合批量删除
	 * @param ids ID集合
	 */
	void delByIds(String[] ids);
	
	/**
	 * 根据多个部门ID查询
	 * @param departIds
	 * @return
	 */
	List<Depart> listDepartByIds(String[] departIds);
}

